<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
    


    <script type="text/javascript">
    // function Sup(a){
    // this.a=a;}  //Sup这个函数 传参A=a

    // Sup.prototype.showA=function(){ 
    // console.log('Sup instance method showA():',this.a);}// Sup这个函数的原型爸爸是showA这个函数

    // function Sub(a,b){
    // Sup.call(this,a);
    // this.b=b;}//Sub这个函数  传参A=a  传参B=b

    // Sub.prototype=new Sup();  //Sub的原型来自构造函数Sup

    // Sub.prototype.showB=function(){
    // console.log('Sub instance method showB():',this.b);} //Sub这个函数的原型爸爸是showB这个函数

    // var o=new Sub(1,2);
    // console.log('a:',o.a,'b:',o.b) //在控制台打印出a:1 b：2   由Sub 传什么是什么

    // o.showA();  //打印出Sup instance method showA()  还把a=1打印出来
    // o.showB();  //Sub instance method showB()   把b=2打印出来

    // console.log('o instanceof Sub:',o instanceof Sub);  //打印出o instanceof Sub: 和true 后者是判断o的原型来自于Sub  
    // console.log('o instanceof Sup:',o instanceof Sup);  //打印出o instanceof Sup: 和true 后者是判断o的原型来自于Sup

    // console.dir(o); //显示o对象的所有属性和方法


//     function Sup(a){
//     this.a=a;}  //sup这个函数中  a=传参

//     Sup.prototype.showA=function(){ 
//     console.log('Sup instance method showA():',this.a);}   // Sup的原型上的ShowA是函数  

//     function Sub(a,b){
//     Sup.call(this,a);
//     this.b=b;}   //Sub这个函数中  a=传参  b=传参

//     function inheritClass(subclass,superclass){  //inheritclass  
//     var f=function(){};  //f为一个函数 
//     f.prototype=superclass.prototype;  //f的原型是 后者的原型
//     subclass.prototype=new f();   //前的原型是 构造函数新的F   这不是圣杯继承吗？
//     Object.defineProperty(subclass.prototype,'constructor',{value:Sub,enumerable:false,writable:false,configurable:false})  
//     //我百度查说  是  三个参数  表示  修改的对象   修改名字   对属性的描述
//     subclass.prototype.constructor=subclass;}  //这不是圣杯继承吗？ 前者的原型构造来自于前者

//     inheritClass(Sub,Sup);  //Sub继承SUP 但是SuB的原型改变  不影响Sup

//     Sub.prototype.__proto__=Sup.prototype;  //sub原型来自于SUP
//     Object.setPrototypeOf(Sub.prototype,Sup.prototype);  //为现有对象设置原型，返回一个新对象  是不是把Sub的原型改成SUP了
//     Sub.prototype.constructor=Sub;   //sub的原型构造是sub

//     Sub.prototype.showB=function(){
//     console.log('Sub instance method showB():',this.b);} //Sub上原型上showB函数


//    var o=new Sub(1,2);  
//    console.log('a:',o.a,'b:',o.b)  //不就是a:1  b:2
//    o.showA();
//    o.showB();
//    console.log('o instanceof Sub:',o instanceof Sub);
//    console.log('o instanceof Sup:',o instanceof Sup);
//    console.dir(o);












    
    
    
    
    
    
    
    
    
    
    
    </script>



</body>
</html>